package config

import (
	"encoding/json"
	"os"

	"gitee.com/xiaoyutab/xgotool/optional/xfile"
)

// 当前备份状态
type StatusInfo struct {
	Stat      map[string]BackupsStatus `json:"stat"`       // 备份数据库状态
	StartTime string                   `json:"start_time"` // 上次运行时间
	RunTime   int64                    `json:"run_time"`   // 上次运行时长【单位：毫秒】
}

type BackupsStatus struct {
	Table string `json:"table"` // 要备份的表
	Id    int64  `json:"id"`    // 当前备份到的ID位置
}

// 获取当前备份状态
func GetStatus() StatusInfo {
	_, err := os.Stat(GetConfig().FileName + ".json")
	if err == nil {
		// 读取该文件作为状态信息
		st := StatusInfo{}
		fp, err := os.OpenFile(GetConfig().FileName+".json", os.O_RDONLY, 0755)
		if err != nil {
			return StatusInfo{}
		}
		defer fp.Close()
		data := make([]byte, 1<<16) // 读取64KB文件大小
		n, err := fp.Read(data)
		if err != nil {
			return StatusInfo{}
		}
		err = json.Unmarshal(data[:n], &st)
		if err != nil {
			return StatusInfo{}
		}
		return st
	}
	return StatusInfo{}
}

// 存储当前备份状态
func SetStatus(c StatusInfo) error {
	// 转换为json结构体
	b, err := json.Marshal(c)
	if err != nil {
		return err
	}
	// 删除原文件
	if _, err := os.Stat(GetConfig().FileName + ".json"); err == nil {
		os.Remove(GetConfig().FileName + ".json")
	}
	err = xfile.Write(GetConfig().FileName+".json", b)
	if err != nil {
		return err
	}
	return nil
}
